read_csv 关键参数的使用方法loc 与 iloc 两种索引方式的区别query 查询方法apply 和 map 进行数据变换高质量数据的四个维度:
| 维度 | 含义 |
|---|---|
| 完整性 | 无缺失值或合理处理 |
| 一致性 | 格式统一,单位一致 |
| 准确性 | 值在合理范围内 |
| 唯一性 | 无重复记录 |
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
import pandas as pd # 导入Pandas数据分析库
#将第一列(date)设置为索引,只读取指定的列usecols
df=pd.read_csv("https://huoran.oss-cn-shenzhen.aliyuncs.com/20230306/csv/1632645776084066304.csv",index_col=0,usecols=['date','syzg','zgpa','zgjz']).dropna()
Trade_days=df.shape[0] # 获取数据维度信息
print(f'2022年共有{Trade_days}个交易日') # 输出2022年共有
stock_price=df.loc['2022-03-01','zgjz'] # 按标签索引提取数据
print(f'3月第一个交易日中国建筑价格为{stock_price}元') # 输出3月第一个交易日中国建筑价格为
df_asc=df.sort_index(ascending=True) # 按索引排序
print(df_asc.head(8)) # 输出前几行数据2022年共有242个交易日
3月第一个交易日中国建筑价格为5.16元
syzg zgpa zgjz
date
2022-01-04 22.80 51.00 5.03
2022-01-05 23.08 52.07 5.02
2022-01-06 23.85 51.30 5.13
2022-01-07 24.81 52.94 5.24
2022-01-10 24.86 53.08 5.37
2022-01-11 24.52 52.86 5.38
2022-01-12 24.49 52.50 5.26
2022-01-13 23.92 52.30 5.20
index_col=0:将第一列(date)设为行索引
usecols=[...]:只加载指定列
.dropna():链式操作,读取后立即删除缺失值数据框形状: (242, 3)
- 行数(交易日): 242
- 列数(股票): 3
索引类型: <class 'pandas.core.indexes.base.Index'>
索引范围: 2022-01-04 到 2022-12-30
列名(股票代码):
['syzg', 'zgpa', 'zgjz']
数据类型:
syzg float64
zgpa float64
zgjz float64
dtype: object
loc 使用标签(行名/列名)进行选择三一重工价格>20的交易日:
syzg zgpa zgjz
date
2022-02-25 20.17 51.40 5.07
2022-02-24 20.19 51.46 5.15
2022-02-23 20.75 52.89 5.30
2022-02-22 20.38 53.07 5.39
2022-02-21 20.78 54.16 5.46
2022-02-18 20.89 54.50 5.50
2022-02-17 20.75 53.65 5.36
2022-02-16 20.82 53.84 5.41
2022-02-15 20.75 53.28 5.31
2022-02-14 20.46 53.90 5.35
2022-02-11 20.82 55.59 5.60
2022-02-10 21.21 54.18 5.46
2022-02-09 21.19 53.04 5.41
2022-02-08 21.25 53.00 5.49
2022-02-07 20.74 51.98 5.48
2022-01-28 20.14 49.97 5.20
2022-01-27 20.73 50.79 5.37
2022-01-26 21.97 51.83 5.38
2022-01-25 21.81 51.20 5.30
2022-01-24 22.75 53.13 5.41
2022-01-21 23.18 53.55 5.33
2022-01-20 24.25 53.40 5.40
2022-01-19 24.35 51.45 5.37
2022-01-18 23.54 51.23 5.28
2022-01-17 23.42 50.94 4.99
2022-01-14 23.38 51.10 5.02
2022-01-13 23.92 52.30 5.20
2022-01-12 24.49 52.50 5.26
2022-01-11 24.52 52.86 5.38
2022-01-10 24.86 53.08 5.37
2022-01-07 24.81 52.94 5.24
2022-01-06 23.85 51.30 5.13
2022-01-05 23.08 52.07 5.02
2022-01-04 22.80 51.00 5.03
df.syzg > 20 返回布尔 Seriesloc 用这个布尔 Series 来筛选行iloc 使用整数位置进行选择前5行前2列:
syzg zgpa
date
2022-12-30 15.80 47.00
2022-12-29 15.66 45.82
2022-12-28 15.84 46.28
2022-12-27 16.18 45.58
2022-12-26 16.21 44.66
第1行第1列: 15.8
倒数第3行:
syzg 23.85
zgpa 51.30
zgjz 5.13
Name: 2022-01-06, dtype: float64
| 特性 | loc |
iloc |
|---|---|---|
| 索引方式 | 标签(行名/列名) | 整数位置 |
| 切片末端 | 包含末端 | 不包含末端 |
| 适用场景 | 按日期/列名查询 | 按位置批量提取 |
| 示例 | df.loc['2022-03-01'] |
df.iloc[0] |
升序排序(日期从早到晚):
syzg zgpa zgjz
date
2022-01-04 22.80 51.00 5.03
2022-01-05 23.08 52.07 5.02
2022-01-06 23.85 51.30 5.13
2022-01-07 24.81 52.94 5.24
2022-01-10 24.86 53.08 5.37
降序排序(日期从晚到早):
syzg zgpa zgjz
date
2022-12-30 15.80 47.00 5.43
2022-12-29 15.66 45.82 5.32
2022-12-28 15.84 46.28 5.39
先按syzg升序, 再按zgpa降序:
syzg zgpa zgjz
date
2022-10-31 13.50 36.15 4.75
2022-10-11 13.61 41.20 5.13
2022-10-10 13.69 41.43 5.22
2022-09-29 13.85 41.32 5.01
2022-09-30 13.88 41.58 5.15
df.syzg > 20 返回布尔 Series三一重工>20 且 中国平安>40:
syzg zgpa zgjz
date
2022-02-25 20.17 51.40 5.07
2022-02-24 20.19 51.46 5.15
2022-02-23 20.75 52.89 5.30
2022-02-22 20.38 53.07 5.39
2022-02-21 20.78 54.16 5.46
三一重工>30 或 中国平安>45:
syzg zgpa zgjz
date
2022-12-30 15.80 47.00 5.43
2022-12-29 15.66 45.82 5.32
2022-12-28 15.84 46.28 5.39
2022-12-27 16.18 45.58 5.41
2022-12-23 16.14 45.64 5.42
& 逻辑与(AND),| 逻辑或(OR)df[df.index.isin(dates_to_check)]syzg > 20:
syzg zgpa zgjz
date
2022-02-25 20.17 51.40 5.07
2022-02-24 20.19 51.46 5.15
2022-02-23 20.75 52.89 5.30
2022-02-22 20.38 53.07 5.39
2022-02-21 20.78 54.16 5.46
syzg > 20 and zgpa < 40:
Empty DataFrame
Columns: [syzg, zgpa, zgjz]
Index: []
@变量名:在 query 中引用 Python 环境变量每列的极差(最高价-最低价):
syzg 11.36
zgpa 19.44
zgjz 1.54
dtype: float64
每行的均值(每日三只股票平均):
date
2022-12-30 22.743333
2022-12-29 22.266667
2022-12-28 22.503333
2022-12-27 22.390000
2022-12-26 22.080000
dtype: float64
axis=0(默认):沿列方向操作axis=1:沿行方向操作(跨列计算)三一重工价格分类(前10个):
date
2022-12-30 低
2022-12-29 低
2022-12-28 低
2022-12-27 低
2022-12-26 低
2022-12-23 低
2022-12-22 低
2022-12-21 低
2022-12-20 低
2022-12-19 低
Name: syzg, dtype: object
map 只用于 Series,对每个元素逐个应用函数| 特性 | apply |
map |
|---|---|---|
| 适用对象 | DataFrame 或 Series | 仅 Series |
| 操作维度 | 按行或按列 | 逐元素 |
| 常见用途 | 聚合统计、跨列计算 | 值替换、分类映射 |
| 示例 | df.apply(func, axis=1) |
series.map(func) |
read_csv 的 index_col、usecols 等参数loc 按标签选择,切片包含末端iloc 按整数位置,切片不含末端sort_index 按索引,sort_values 按值&/|)与 query 方法apply 按行/列操作,map 逐元素操作[商业大数据分析与应用]